PRG 1.0 TXT

/*
*/

//-----------------------------------------------------------------------------
// [CONFIG]

include "..\program_include.ocf"

object Program
{
	type		= e_program.DEPTH;
	layer_bits	= e_render_layer_bits.DEPTH;
}


//-----------------------------------------------------------------------------
// [VERTEX]

#version 330 core
#pragma optimize(on)

void main()
{
	gl_Position = vec4(0.0);
}


//-----------------------------------------------------------------------------
// [GEOMETRY]

#version 330 core
#pragma optimize(on)

layout(points) in;
layout(triangle_strip, max_vertices = 16) out;

uniform mat4	unVPMat;
uniform vec3	unAABB[2];	// min, max

/*
	   /4--------/2
	  / |       / |
	 /  |      /  |
	6---------0   |
	|  /5- - -|- -3
	| /       |  /
	|/        | /
	7---------1/
	
	0 - max
	5 - min
	
	first strip:  0,1,2,3,4,5,6,7
	second strip: 4,2,6,0,7,1,5,3
*/

void Vertex(in vec3 pos)
{
	gl_Position = vec4( pos, 1.0 ) * unVPMat;
	EmitVertex();
}

void main()
{
	vec3	v_min = unAABB[0];
	vec3	v_max = unAABB[1];

	/*0*/ Vertex( v_max );
	/*1*/ Vertex( vec3( v_max.xy, v_min.z ) );
	/*2*/ Vertex( vec3( v_max.x, v_min.y, v_max.z ) );
	/*3*/ Vertex( vec3( v_max.x, v_min.y, v_min.z ) );
	/*4*/ Vertex( vec3( v_min.xy, v_max.z ) );
	/*5*/ Vertex( v_min );
	/*6*/ Vertex( vec3( v_min.x, v_max.yz ) );
	/*7*/ Vertex( vec3( v_min.x, v_max.y, v_min.z ) );
	EndPrimitive();

	/*4*/ Vertex( vec3( v_min.xy, v_max.z ) );
	/*2*/ Vertex( vec3( v_max.x, v_min.y, v_max.z ) );
	/*6*/ Vertex( vec3( v_min.x, v_max.yz ) );
	/*0*/ Vertex( v_max );
	/*7*/ Vertex( vec3( v_min.x, v_max.y, v_min.z ) );
	/*1*/ Vertex( vec3( v_max.xy, v_min.z ) );
	/*5*/ Vertex( v_min );
	/*3*/ Vertex( vec3( v_max.x, v_min.y, v_min.z ) );
	EndPrimitive();
}


//-----------------------------------------------------------------------------
// [FRAGMENT]

#version 330 core

void main()
{
}

// [END]
